boto3を使ってS3バケットのACLを無効化する
こんにちは。サービス部の武田です。
Amazon S3のポリシー設定は歴史的な経緯から複雑になっています。特に複雑にしているのがACLの存在ですが、これは2021年のアップデートで無効化できるようになりました。また、 無効化が推奨 されています。
今回Pythonのboto3を使って、ACLを無効化する機会がありましたので共有します。
必要な権限
ACLを無効化する際にはs3:PutBucketOwnershipControls
の権限が必要です。事前に付与されているか、されていない場合は追加することを忘れないでください。
新規バケット作成時に無効化する
新規バケットを作成する際に、ACLを無効化できます。create_bucket
にObjectOwnership
パラメーターが指定できるため、ここにBucketOwnerEnforced
を指定すればOKです。
s3 = boto3.client("s3") s3.create_bucket( Bucket="YOUR_BUCKET_NAME", CreateBucketConfiguration={"LocationConstraint": "ap-northeast-1"}, ObjectOwnership="BucketOwnerEnforced", )
既存バケットを無効化する
既存のバケットのACLを無効化する場合、put_bucket_ownership_controls
を使用します。OwnershipControls
パラメーターはdictになっており、Rules
でObjectOwnership: BucketOwnerEnforced
を指定します。
s3 = boto3.client("s3") s3.put_bucket_ownership_controls( Bucket="YOUR_BUCKET_NAME", OwnershipControls={ "Rules": [ {"ObjectOwnership": "BucketOwnerEnforced"}, ] }, )
注意する点として、ACLの設定をデフォルトから変更している場合エラーとなります。その場合は少し手間ですが設定を元に戻すなりの対応が必要です。
まとめ
S3バケットのACLは無効化が推奨されています。特別な理由がない限りは無効化して運用をしましょう。